<?php

App::uses('AppController', 'Controller');

/**
 * Movimientos Controller
 *
 * @property Movimiento $Movimiento
 * @property PaginatorComponent $Paginator
 */
class MovimientosController extends AppController {

    /**
     * Components
     *
     * @var array
     */
    public $components = array('Paginator','Enletras');
    public $uses = array('Movimiento', 'Moneda', 'User', 'Parametro', 'Tipospago','Categoria','Recibo','Serie','Tcambio');
    public $layout = 'sib';

    /**
     * index method
     *
     * @return void
     */
    public function index() {
        $this->Movimiento->recursive = 0;
        $this->set('movimientos', $this->Paginator->paginate());
    }

    /**
     * view method
     *
     * @throws NotFoundException
     * @param string $id
     * @return void
     */
    public function view($id = null) {
        if (!$this->Movimiento->exists($id)) {
            throw new NotFoundException(__('Invalid movimiento'));
        }
        $options = array('conditions' => array('Movimiento.' . $this->Movimiento->primaryKey => $id));
        $this->set('movimiento', $this->Movimiento->find('first', $options));
    }

    /**
     * add method
     *
     * @return void
     */
    public function add($idUser = null) {
        $this->actualiza_pagos($idUser);
        
        $dcp = $this->Tipospago->find('all', array(
            'recursive' => -1,
            'fields' => array('Tipospago.id', 'Tipospago.nombre'),
            'order' => array('Tipospago.nombre ASC')
        ));

        $datosColegiado = $this->User->find('first', array(
            'recursive' => -1,
            'conditions' => array('User.id' => $idUser)
        ));

        $movimientos = $this->Movimiento->find('all', array(
            'recursive' => 0,
            'conditions' => array('Movimiento.estado' => 'Debe', 'Movimiento.user_id' => $idUser)
        ));
        if(empty($datosColegiado['User']['rni'])){
           $this->Session->setFlash('Asignar el RNI','msgerror'); 
        }
        /*$parametros = $this->Parametro->find('all', array(
            'recursive' => -1,
            'conditions' => array('Parametro.tipo' => array('Todos',$datosColegiado['User']['tipo']))
        ));*/
        
        $t_cambio = $this->get_tipo_cambio();
        $this->set(compact('movimientos', 'datosColegiado', 'parametros', 'dcp','idUser','t_cambio'));
    }

    /**
     * edit method
     *
     * @throws NotFoundException
     * @param string $id
     * @return void
     */
    public function edit($id = null) {
        if (!$this->Movimiento->exists($id)) {
            throw new NotFoundException(__('Invalid movimiento'));
        }
        if ($this->request->is(array('post', 'put'))) {
            if ($this->Movimiento->save($this->request->data)) {
                $this->Session->setFlash(__('The movimiento has been saved.'));
                return $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The movimiento could not be saved. Please, try again.'));
            }
        } else {
            $options = array('conditions' => array('Movimiento.' . $this->Movimiento->primaryKey => $id));
            $this->request->data = $this->Movimiento->find('first', $options);
        }
        $users = $this->Movimiento->User->find('list');
        $this->set(compact('users'));
    }

    /**
     * delete method
     *
     * @throws NotFoundException
     * @param string $id
     * @return void
     */
    public function delete($id = null) {
        $this->Movimiento->id = $id;
        if (!$this->Movimiento->exists()) {
            throw new NotFoundException(__('Invalid movimiento'));
        }
        $this->request->onlyAllow('post', 'delete');
        if ($this->Movimiento->delete()) {
            $this->Session->setFlash(__('The movimiento has been deleted.'));
        } else {
            $this->Session->setFlash(__('The movimiento could not be deleted. Please, try again.'));
        }
        return $this->redirect(array('action' => 'index'));
    }

    public function registradeudas() {
        debug($this->_calculadeudas('2012-03-20', '2014-03-20'));
        //$fechai = 
    }

    public function genera_meses($fInicial = null,$fFinal = null)
    {
        if(!empty($fInicial) && !empty($fFinal))
        {
            $fi = $fInicial;
                $ff = $fFinal;
                $fIni = new DateTime($fInicial);
                $fFin = new DateTime($fFinal);
                $diferencia = $fIni->diff($fFin);
                $meses = ($diferencia->y * 12) + $diferencia->m;
                $fechai = explode("-", $fi);
                $cMeses = $fechai[1];
                $cAnos = $fechai[0];
                $array =  array();
                for ($i = 0; $i < $meses; $i++) {
                    $cMeses++;
                    if ($cMeses == 13) {
                        $cAnos++;
                        $cMeses = 1;
                    }
                    $cFecha = date("Y-m-d", mktime(0, 0, 0, $cMeses, 1, $cAnos));
                    $array[$i]['fecha'] = $cFecha;
                }
                return $array;
        }
        else{
            return array();
        }
    }
    public function genera_anual($fInicial = null,$fFinal = null)
    {
        $fInicial = split('-', $fInicial);
        $fFinal = split('-', $fFinal);
        if($fFinal[1] > $fInicial[1])
        {
            $anos = $fFinal[0] - $fInicial[0];
        }
        elseif($fFinal[1] == $fInicial[1] && $fFinal[2] >= $fInicial[2]){
            $anos = $fFinal[0] - $fInicial[0];
        }
        else{
            $anos = $fFinal[0] - $fInicial[0] - 1;
        }
        $array = array();
        $canos = $fInicial[0]+1;
        for($i = 0;$i < $anos ;$i++)
        {
            $fecha = $canos.'-'.$fInicial[1].'-'.$fInicial[2];
            $array[$i]['fecha'] = $fecha;
            $canos++;
        }
        return $array;
        //debug($array);exit;
    }

    private function _calculadeudas($fInicial, $fFinal) {
        $ff = $fFinal;
        $fi = $fInicial;

        $fIni = new DateTime($fInicial);
        $fFin = new DateTime($fFinal);
        $diferencia = $fIni->diff($fFin);
        $meses = ( $diferencia->y * 12 ) + $diferencia->m;

        //calculamos los meses
        //debug($meses);
        $fechai = explode("-", $fi);
        //debug($fechai);
        //$fechaf = explode("-", $ff);
        //debug($fechaf);

        $cMeses = $fechai[1];
        //debug($cMeses);

        $cAnos = $fechai[0];
        //debug($cAnos);

        for ($i = 0; $i < $meses; $i++) {
            $cMeses++;
            if ($cMeses == 13) {
                $cAnos++;
                $cMeses = 1;
            }
            //echo date("m-d-Y", mktime(0, 0, 0, $cMeses, 1, $cAnos)).'----';
            $cFecha = date("Y-m-d", mktime(0, 0, 0, $cMeses, 1, $cAnos));
            //echo date("Y-m-d", mktime(0, 0, 0, $cMeses, 1, $cAnos)).'----';
            echo $cFecha . '--------------->';
            //$fecha
            echo '01-' . $cMeses . '-' . $cAnos . '<br />';
            //debug($cMeses);
            //debug($cAnos);
        }
        return $meses;
    }

    public function pormonto() {
        if ($this->request->is('post')) {
            // debug($this->request->data); die;
            $cantCuotas = $this->request->data['Movimiento']['ccuotas'];
            $idUsuario = $this->request->data['Movimiento']['user_id'];
            $cuotas = $this->Movimiento->find('all', array(
                'recursive' => -1,
                'conditions' => array(
                    'Movimiento.estado' => 'Debe',
                    'Movimiento.user_id' => $idUsuario
                ),
                'order' => 'Movimiento.id ASC',
                'limit' => $cantCuotas
            ));
            foreach ($cuotas as $c) {
                //debug($c);
                $idModificar = $c['Movimiento']['id'];
                //$idMovimiento = $c['Movimiento']['id'];
                $modificar = array('id' => $idModificar, 'estado' => 'Pagado');
                $this->Movimiento->save($modificar);
            }

            //debug($modificar);die;
            $this->set(compact('cuotas'));
            $this->redirect(array('action' => 'add', $idUsuario));
        }
    }

    public function controlpanel() {
        
    }

    public function ajaxmuestracuotas($idTipoPago = null) {

        $this->layout = 'ajax';
        $datosPago = $this->Tipospago->find('first', array(
            'recursive' => -1,
            'conditions' => array('Tipospago.id' => $idTipoPago)
        ));
        $this->set(compact('datosPago'));
    }

    public function ajaxmuestramoneda($tipoMoneda = null) {

        $this->layout = 'ajax';
        
        if ($tipoMoneda == 'sus') {            
            
            $datosParametro = $this->Parametro->find('first', array(
                'recursive' => -1,
            ));
            
            $this->set(compact('datosParametro'));
            
        }
        
    }
    public function ajax_pago($idUsuario = null,$monto_bol = null,$parametros = null)
    {
        $this->layout = 'ajax';
        $usuario = $this->User->find('first',array(
            'recursive' => -1
            ,'conditions' => array('User.id' => $idUsuario)
            //,'fields' => array('User.nombre_completo')
            ));
            $this->request->data['Movimiento']['monto'] = $monto_bol;
            $this->request->data['Movimiento']['parametro_id'] = $parametros;
            $parametros = $this->Parametro->find('list',array('fields' => 'Parametro.nombre','conditions' => array('Parametro.tipo' => array($usuario['User']['tipo'],'Todos'))));
            $this->set(compact('usuario','parametros','idUsuario'));
        /*debug($idUsuario);
        debug($usuario);exit;*/
    }
    public function calcula_pago_monto()
    {
        $this->layout = 'ajax';
        if(!empty($this->request->data))
        {
            $monto = $this->request->data['Movimiento']['monto'];
            $moneda = $this->request->data['Movimiento']['moneda'];
            $idParametro = $this->request->data['Movimiento']['parametro_id'];
            $idUser = $this->request->data['Movimiento']['user_id'];
            $usuario = $this->User->find('first',array('conditions' => array('User.id' => $idUser))); 
            $saldo_b = $usuario['User']['saldo'];
            $saldo_d = number_format($this->get_pago_moneda($saldo_b, 'Dolares'),2,'.','');
            
            if($moneda == 'Bolivianos')
            {
                $bolivianos = number_format($monto,2,'.','');
                $dolares = number_format($this->get_pago_moneda($monto, 'Dolares'),2,'.','');
            }
            else{
                $dolares = number_format($monto,2,'.','');
                $bolivianos = number_format($this->get_pago_moneda($monto, 'Bolivianos'),2,'.','');
            }
            
            $bolivianos = number_format(($bolivianos + $saldo_b),2,'.','');
            $dolares = number_format(($dolares + $saldo_d),2,'.','');
            $this->request->data = null;
            $movimientos = $this->Movimiento->find('all',array(
                'recursive' => -1
                ,'order' => 'Movimiento.id ASC'
                ,'conditions' => array('Movimiento.user_id' => $idUser,'Movimiento.estado' => 'Debe','Movimiento.parametro_id' => $idParametro)
                ));
            $array = array();
            /*debug($this->request->data);
            debug($idUser);
            debug($idParametro);
            debug($movimientos);exit;*/
            
            $i = 0;
                foreach ($movimientos as $mo)
                {
                    if($mo['Movimiento']['moneda'] == 'Bolivianos')
                    {
                        $m_bolivianos = number_format($mo['Movimiento']['cuota'],2,'.','');
                        $m_dolares = number_format($this->get_pago_moneda($mo['Movimiento']['cuota'], 'Dolares'),2,'.','');
                    }
                    else{
                        $m_dolares = number_format($mo['Movimiento']['cuota'],2,'.','');
                        $m_bolivianos = number_format($this->get_pago_moneda($mo['Movimiento']['cuota'], 'Bolivianos'),2,'.','');
                    }
                    if(($bolivianos - $m_bolivianos) >= 0)
                    {
                        $array[$i]['id'] = $mo['Movimiento']['id'];
                        $array[$i]['fecha'] = $mo['Movimiento']['fecha_cuota'];
                        $array[$i]['cuota_bolivianos'] = $m_bolivianos;
                        $array[$i]['cuota_dolares'] = $m_dolares;
                        //$this->movimiento_pagado($mo['Movimiento']['id']);
                        $bolivianos = number_format(($bolivianos-$m_bolivianos),2,'.','');
                        $dolares = number_format($dolares - $m_dolares,2,'.','');
                        $i++;
                    }
                    else{
                        //debug('entro aqui');exit;
                        break;
                    }
                }
                //debug($array);exit;
                $numero = 0;
                $parametro = $this->Parametro->find('first',array('recursive' => -1,'conditions' => array('Parametro.id' => $idParametro)));
                if($parametro['Parametro']['moneda'] == 'Bolivianos')
                {
                    $cuota_bolivianos = $parametro['Parametro']['cuota'];
                    $cuota_dolares = $this->get_pago_moneda($cuota_bolivianos, 'Dolares');
                }
                else{
                    $cuota_dolares = $parametro['Parametro']['cuota'];
                    $cuota_bolivianos = $this->get_pago_moneda($cuota_dolares, 'Bolivianos');
                }
                $numero = intval($bolivianos/$cuota_bolivianos);
                $extarray = array();
                if($numero > 0)
                {
                    $extarray = $this->get_ext_movimientos($idUser,$numero,$idParametro);
                    for($j = 0;$j < count($extarray);$j++)
                    {
                        $extarray[$j]['cuota_bolivianos'] = $cuota_bolivianos;
                        $extarray[$j]['cuota_dolares'] = $cuota_dolares;
                        $extarray[$j]['cuota'] = $cuota_dolares;
                        $extarray[$j]['moneda'] = $parametro['Parametro']['moneda'];
                        $extarray[$j]['parametro_id'] = $parametro['Parametro']['id'];
                        $bolivianos = number_format(($bolivianos-$cuota_bolivianos),2,'.','');
                        $dolares = number_format($dolares - $cuota_dolares,2,'.','');
                    }
                }
        }
        else{
            $mensajem = 'No se encontro datos';
        }
        $tcambio = $this->get_tipo_cambio();
        $this->set(compact('array','mensajem','bolivianos','dolares','usuario','parametro','moneda','tcambio','extarray'));
    }
    
    public function get_ext_movimientos($idUsuario = null,$numero = null,$idParametro = null)
    {
        $ultimo_movimiento = $this->Movimiento->find('first',array('recursive' => -1
            ,'order' => 'Movimiento.id DESC'
            ,'conditions' => array('Movimiento.user_id' => $idUsuario,'Movimiento.parametro_id' => $idParametro)
            ,'fields' => array('Movimiento.fecha_cuota')));
        if(!empty($ultimo_movimiento))
        {
            $fecha = split('-', $ultimo_movimiento['Movimiento']['fecha_cuota']);
            $nueva_fecha = (intval($fecha[0])+(intval((intval($fecha[1])+$numero)/12))).'-'.  sprintf("%02d", (intval((intval($fecha[1])+$numero)%12))).'-'.$fecha[2];
            return  $this->genera_meses($ultimo_movimiento['Movimiento']['fecha_cuota'], $nueva_fecha);
        }
        else{
            return array();
        }
    }
    public function get_pago_moneda($monto = null,$moneda = null,$t_cambio = null)
    {
        if(!empty($t_cambio))
        {
            $cambio = $this->get_tipo_cambio();
        }
        else{
            $cambio = $this->get_tipo_cambio();
        }
        if($moneda == 'Bolivianos')
        {
            return $monto*$cambio;
        }
        else{
            return ($monto/$cambio);
        }
    }
    public function get_tipo_cambio()
    {
        $cambio = 0.00;
        $tcambio = $this->Tcambio->find('first',array('order' => 'Tcambio.id DESC'));
        if(!empty($tcambio))
            $cambio = $tcambio['Tcambio']['cambio'];
        return $cambio;
    }
    public function guarda_pago()
    {
        if(!empty($this->request->data['Recibo']['user_id']) && !empty($this->request->data['Mode']))
        {
            //debug($this->request->data);exit;
            if($this->request->data['Movimiento']['guarda'] == 1 && !empty($this->request->data['Movimiento']['queda_b']))
            {
                $this->request->data['Recibo']['saldo'] = $this->request->data['Movimiento']['queda_b'];
            }
            else{
                $this->request->data['Recibo']['saldo'] = 0.00;
            }
            if(!$this->genera_recibo())
            {
                $this->Session->setFlash('Ocurrio un problema al momento de crear el recibo rebisar si existe una serie disponible','msgerror');
                $this->redirect(array('action' => 'add',$this->request->data['Recibo']['user_id']));
            }
            if($this->request->data['Movimiento']['guarda'] == 1 && !empty($this->request->data['Movimiento']['queda_b']))
            {
                $this->guarda_saldo($this->request->data['Recibo']['user_id'],  $this->request->data['Movimiento']['queda_b']);
            }
            else{
                $this->guarda_saldo($this->request->data['Recibo']['user_id'], 0.00);
            }
            
                
            foreach($this->request->data['Mode'] as $mo)
            {
                if(!empty($mo['dato']))
                {
                    $this->movimiento_pagado($mo['dato'],$this->request->data['Aux']['recibo_id']);
                }
                else{
                    $this->request->data['Movimiento']['user_id'] = $mo['user_id'];
                    $this->request->data['Movimiento']['fecha_cuota'] = $mo['fecha_cuota'];
                    $this->request->data['Movimiento']['cuota'] = $mo['cuota'];
                    $this->request->data['Movimiento']['moneda'] = $mo['moneda'];
                    $this->request->data['Movimiento']['parametro_id'] = $mo['parametro_id'];
                    $this->request->data['Movimiento']['estado'] = 'Pagado';
                    $this->request->data['Movimiento']['recibo_id'] = $this->request->data['Aux']['recibo_id'];
                    $this->Movimiento->create();
                    $this->Movimiento->save($this->request->data['Movimiento']);
                }
            }
            $this->Session->setFlash('Se regsitro el pago correctamente','msgbueno');
            $this->redirect(array('action' => 'recibo',$this->request->data['Aux']['recibo_id']));
        }
        else{
            $this->Session->setFlash('Faltan datos','msgerror');
            $this->redirect(array('controller' => 'Users','action' => 'colegiados'));
        }
    }
    
    public function guarda_pago2()
    {
        if(!empty($this->request->data['Recibo']['user_id']))
        {
            
            //debug($this->request->data);exit;
            if(!empty($this->request->data['Movimiento']['queda_b']))
            {
                $this->request->data['Recibo']['saldo'] = $this->request->data['Movimiento']['queda_b'];
            }
            if($this->request->data['Recibo']['moneda'] == 'Bolivianos')
            {
                $this->request->data['Recibo']['total'] = $this->request->data['Recibo']['total'] + $this->request->data['Movimiento']['saldo_ant'] -$this->request->data['Movimiento']['queda_b'];
            }
            elseif($this->request->data['Recibo']['moneda'] == 'Dolares')
            {
                $this->request->data['Recibo']['total'] = $this->request->data['Recibo']['total'] + $this->get_pago_moneda($this->request->data['Movimiento']['saldo_ant'], 'Dolares') - $this->get_pago_moneda($this->request->data['Movimiento']['queda_b'], 'Dolares');
            }
            if(!$this->genera_recibo())
            {
                $this->Session->setFlash('Ocurrio un problema al momento de crear el recibo rebisar si existe una serie disponible','msgerror');
                $this->redirect(array('action' => 'add',$this->request->data['Recibo']['user_id']));
            }
            if(!empty($this->request->data['Movimiento']['queda_b']))
            {
                $this->guarda_saldo($this->request->data['Recibo']['user_id'],  $this->request->data['Movimiento']['queda_b']);
            }
            for($i = 0;$i <= $this->request->data['Movimiento']['hasta'];$i++)
            {
                if(!empty($this->request->data['Movimiento'][$i]['dato']))
                {
                    $this->movimiento_pagado($this->request->data['Movimiento'][$i]['dato'],$this->request->data['Aux']['recibo_id']);
                }
            }
            /*foreach($this->request->data['Movimiento'] as $mo)
            {
                if(!empty($mo['dato']))
                {
                    $this->movimiento_pagado($mo['dato'],$this->request->data['Aux']['recibo_id']);
                }
            }*/
            $this->Session->setFlash('Se regsitro el pago correctamente','msgbueno');
            $this->redirect(array('action' => 'recibo',$this->request->data['Aux']['recibo_id']));
        }
        else{
            $this->Session->setFlash('Faltan datos','msgerror');
            $this->redirect(array('action' => 'index'));
        }
    }
    
    public function genera_recibo()
    {
        $serie = $this->genera_numero_recibo();
        if($serie != NULL)
        {
            $this->request->data['Recibo']['numero'] = $serie['numero'];
            $this->request->data['Recibo']['serie_id'] = $serie['serie'];
            $this->request->data['Recibo']['lugar'] = 'La Paz';
            $this->Recibo->create();
            $this->Recibo->save($this->request->data['Recibo']);
            $this->request->data['Aux']['recibo_id'] = $this->Recibo->getLastInsertID();
            $this->actualiza_serie($serie['serie'], $serie['numero']);
            return true;
        }
        else{
            return false;
        }
    }
    public function actualiza_serie($idSerie = null,$numero = null)
    {
        $serie = $this->Serie->findByid($idSerie);
        if($serie['Serie']['numero'] == $numero)
        {
            $this->request->data['Serie']['estado'] = 1;
        }
        $this->request->data['Serie']['numero'] = $numero;
        
        $this->Serie->id = $idSerie;
        $this->Serie->save($this->request->data['Serie']);
    }
    public function genera_numero_recibo()
    {
        $serie = $this->Serie->find('first',array('conditions' => array('Serie.estado' => 0)));
        if(!empty($serie))
        {
            $array['numero'] = $serie['Serie']['numero'] + 1;
            $array['serie'] = $serie['Serie']['id'];
            return $array;
        }
        else{
            return NULL;
        }
    }
    public function movimiento_pagado($idMovimiento = null,$idRecibo = NULL)
    {
        $this->Movimiento->id = $idMovimiento;
        $this->request->data['Movimiento']['estado'] = 'Pagado';
        $t_cambio = $this->get_tipo_cambio();
        if(!empty($t_cambio))
        {
            $this->request->data['Movimiento']['tc'] = $t_cambio;
        }
        if(!empty($idRecibo))
        {
            $this->request->data['Movimiento']['recibo_id'] = $idRecibo;
        }
        $this->Movimiento->save($this->request->data['Movimiento']);
    }
    public function guarda_saldo($idUser = null,$saldo = null)
    {
        $this->User->id = $idUser;
        $this->request->data['User']['saldo'] = $saldo;
        $this->User->save($this->request->data['User']);
    }
    public function ajax_pago_cuotas($idUsuario = null)
    {
        $this->layout = 'ajax';
        $usuario = $this->User->find('first',array(
            'recursive' => -1
            ,'conditions' => array('User.id' => $idUsuario)
            //,'fields' => array('User.nombre_completo')
            ));
        $parametros = $this->Parametro->find('list',array('fields' => 'Parametro.nombre','conditions' => array('Parametro.tipo' => array($usuario['User']['tipo'],'Todos'))));
            
            $this->set(compact('usuario','parametros','idUsuario'));
        /*debug($idUsuario);
        debug($usuario);exit;*/
    }
    public function calcula_pago_cantidad()
    {
        $this->layout = 'ajax';
        if(!empty($this->request->data['Movimiento']['user_id']))
        {
            $idUsuario = $this->request->data['Movimiento']['user_id'];
            $cantidad = $this->request->data['Movimiento']['cantidad_c'];
            $idParametro = $this->request->data['Movimiento']['parametro_id'];
            $movimientos = $this->Movimiento->find('all',array(
                'recursive' => -1
                ,'limit' => $cantidad
                    ,'conditions' => array('Movimiento.user_id' => $idUsuario,'Movimiento.parametro_id' => $idParametro,'Movimiento.estado' => 'Debe')));
            $array = array();$i = 0;
            foreach($movimientos as $mo)
            {
                    if($mo['Movimiento']['moneda'] == 'Bolivianos')
                    {
                        $m_bolivianos = number_format($mo['Movimiento']['cuota'],2,'.','');
                        $m_dolares = number_format($this->get_pago_moneda($mo['Movimiento']['cuota'], 'Dolares'),2,'.','');
                    }
                    else{
                        $m_dolares = number_format($mo['Movimiento']['cuota'],2,'.','');
                        $m_bolivianos = number_format($this->get_pago_moneda($mo['Movimiento']['cuota'], 'Bolivianos'),2,'.','');
                    }
                        $array[$i]['id'] = $mo['Movimiento']['id'];
                        $array[$i]['fecha'] = $mo['Movimiento']['fecha_cuota'];
                        $array[$i]['cuota_bolivianos'] = $m_bolivianos;
                        $array[$i]['cuota_dolares'] = $m_dolares;
                $i++;
            }
            $numero = $cantidad - count($movimientos);
            $parametro = $this->Parametro->find('first',array('recursive' => -1,'conditions' =>array('Parametro.id' => $idParametro)));
            $usuario = $this->User->find('first',array('conditions' => array('User.id' => $idUsuario)));
                if($parametro['Parametro']['moneda'] == 'Bolivianos')
                {
                    $cuota_bolivianos = $parametro['Parametro']['cuota'];
                    $cuota_dolares = $this->get_pago_moneda($cuota_bolivianos, 'Dolares');
                }
                else{
                    $cuota_dolares = $parametro['Parametro']['cuota'];
                    $cuota_bolivianos = $this->get_pago_moneda($cuota_dolares, 'Bolivianos');
                }
            $extarray = $this->get_ext_movimientos($idUsuario,$numero,$idParametro);
                    for($j = 0;$j < count($extarray);$j++)
                    {
                        $extarray[$j]['cuota_bolivianos'] = $cuota_bolivianos;
                        $extarray[$j]['cuota_dolares'] = $cuota_dolares;
                        $extarray[$j]['cuota'] = $cuota_dolares;
                        $extarray[$j]['moneda'] = $parametro['Parametro']['moneda'];
                        $extarray[$j]['parametro_id'] = $parametro['Parametro']['id'];
                    }
                    
            $this->set(compact('usuario','parametro','array','extarray'));
            
        }
        else{
            
        }
    }
    public function recibo($idRecibo = null)
    {
        $recibo = $this->Recibo->findByid($idRecibo,null,null,0);
        $texto = $this->Enletras->ValorEnLetras($recibo['Recibo']['total'],'');
        if($recibo['Recibo']['moneda'] == 'Bolivianos')
        {
            $simbolo = 'Bs.';
        }
        else{
            $simbolo = '$u$';
        }
        $array = $this->genera_detalle_recibo($idRecibo,$recibo['Recibo']['moneda']);
        /*debug($recibo);
        debug($array);exit;*/
        $this->set(compact('recibo','texto','simbolo','array'));
        //debug($recibo);exit;
    }
    public function genera_detalle_recibo($idRecibo = null,$moneda = null)
    {
        $parametros = $this->Movimiento->find('all',array('recursive' => 0
            ,'conditions' => array('Movimiento.recibo_id' => $idRecibo)
            ,'group' => array('Movimiento.parametro_id')
            ,'fields' => array('Parametro.id','Parametro.nombre','Parametro.tipo')
            ));
        
        $array = array();
        $i = 0;
        
            foreach ($parametros as $pa)
            {
                $movimientos = $this->Movimiento->find('all',array('recursive' => -1
                    ,'conditions' => array('Movimiento.recibo_id' => $idRecibo,'Movimiento.parametro_id' => $pa['Parametro']['id'])
                    ,'fields' => array('Movimiento.moneda','Movimiento.tc','Movimiento.cuota','Movimiento.fecha_cuota')
                    ));
                $array[$i]['concepto'] = $pa['Parametro']['nombre'];
                $detalle = '';
                if($pa['Parametro']['tipo'] != 'Todos')
                {
                    $detalle = $pa['Parametro']['tipo'];
                }
                if(count($movimientos) > 1)
                {
                    $primero = current($movimientos);
                    //debug($primero);exit;
                    $detalle = $detalle.' Desde: '.$primero['Movimiento']['fecha_cuota'].' Hasta: '.$movimientos[count($movimientos)-1]['Movimiento']['fecha_cuota'];
                }
                elseif(count($movimientos) == 1)
                {
                    $detalle = $detalle.' de fecha: '.$movimientos[0]['Movimiento']['fecha_cuota'];
                }
                $array[$i]['detalle'] = $detalle;
                $total = 0.00;
                foreach($movimientos as $mo)
                {
                        if($mo['Movimiento']['moneda'] == $moneda)
                        {
                            $monto = number_format($mo['Movimiento']['cuota'],2,'.','');
                        }
                        else{
                            $monto = number_format($this->get_pago_moneda($mo['Movimiento']['cuota'], $moneda, $mo['Movimiento']['tc']),2,'.','');
                        }
                        $total = $total + $monto;
                }
                $array[$i]['cuota'] = $total;
                $i++;
            }
            return $array;
    }
    public function get_saldo_usuario($idUsuario = null)
    {
        $usuario = $this->User->find('first',array('recursive' => -1,'fields' => array('User.saldo')
            ,'conditions' => array('User.id' => $idUsuario)));
        return $usuario['User']['saldo'];
    }
    public function get_saldo_dolares_usuario($idUsuario = null)
    {
        $usuario = $this->User->find('first',array('recursive' => -1,'fields' => array('User.saldo')
            ,'conditions' => array('User.id' => $idUsuario)));
        return $this->get_pago_moneda($usuario['User']['saldo'], 'Dolares');
    }
    public function existe_parametro($idUser = null,$idParametro = null)
    {
        $existe = $this->Movimiento->find('first',array('recursive' => -1,'conditions' => array('Movimiento.user_id' => $idUser,'Movimiento.parametro_id' => $idParametro)));
        if(!empty($existe))
        {
            return true;
        }
        else{
            return false;
        }
    }
    //actualiza los pagos de cada usuario hasta la fecha
    public function actualiza_pagos($idUser = null)
    {
        $usuario = $this->User->find('first',array('recursive' => -1
            ,'fields' => array('User.tipo','User.fecha_titulo')
            ,'conditions' => array('User.id' => $idUser)));
        $parametros = $this->Parametro->find('all',array('recursive' => -1
            ,'conditions' => array('Parametro.estado' => 1,'Parametro.tipo' => array($usuario['User']['tipo'],'Todos'))
            ,'fields' => array('Parametro.id','Parametro.nombre','Parametro.frecuencia','Parametro.cuota','Parametro.moneda','date(Parametro.created) creado')));
        //debug($parametros);exit;
        foreach($parametros as $pa)
        {
            $fecha_ini = $this->getlast_fecha_movi($idUser, $pa['Parametro']['id'], $pa[0]['creado']);
            if($pa['Parametro']['frecuencia'] == 'mensual')
            {
                $veces = $this->genera_meses($fecha_ini, date('Y-m-d'));
                foreach ($veces as $ve)
                {
                    $this->genera_cuota($idUser,$ve['fecha'],$pa['Parametro']['cuota'],  $this->get_tipo_cambio(),$pa['Parametro']['moneda'],$pa['Parametro']['id']);
                }
            }
            elseif($pa['Parametro']['frecuencia'] == 'anual')
            {
                $veces = $this->genera_anual($fecha_ini, date('Y-m-d'));
                foreach ($veces as $ve)
                {
                    $this->genera_cuota($idUser,$ve['fecha'],$pa['Parametro']['cuota'],  $this->get_tipo_cambio(),$pa['Parametro']['moneda'],$pa['Parametro']['id']);
                }
            }
        }
    }
    public function genera_cuota($idUsuario = NULL,$cFecha = NULL,$cuota = NULL,$tc = NULL,$moneda = NULL,$idParametro = NULL)
    {
        if(!empty($idUsuario) && !empty($cFecha) && !empty($cuota) && !empty($tc) && !empty($moneda))
        {
                    $this->request->data['Movimiento']['user_id'] = $idUsuario;
                    $this->request->data['Movimiento']['fecha_cuota'] = $cFecha;
                    $this->request->data['Movimiento']['cuota'] = $cuota;
                    $this->request->data['Movimiento']['ingreso'] = $cuota;
                    $this->request->data['Movimiento']['tc'] = $tc;
                    $this->request->data['Movimiento']['moneda'] = $moneda;
                    $this->request->data['Movimiento']['estado'] = 'Debe';
                    $this->request->data['Movimiento']['parametro_id'] = $idParametro;
                    $this->Movimiento->create();
                    $this->Movimiento->save($this->request->data['Movimiento']);
        }
                    
    }
    // obtiene la fecha del ultimo pago del usuario segun el parametro
    public function getlast_fecha_movi($idUser = null,$idParametro = null,$fecha_parametro = null)
    {
        $movimiento = $this->Movimiento->find('first',array('recursive' => -1,'order' => 'Movimiento.id DESC'
            ,'conditions' => array('Movimiento.user_id' => $idUser,'Movimiento.parametro_id' => $idParametro)));
        if(!empty($movimiento))
        {
            return $movimiento['Movimiento']['fecha_cuota'];
        }
        else{
            return $fecha_parametro;
        }
    }
    public function pagosrealizados($idUsuario = null)
    {
        $usuario = $this->User->find('first',array('recursive' => -1
            ,'conditions' => array('User.id' => $idUsuario),'fields' => array('User.nombre_completo','User.rni','User.tipo')));
        $movimientos = $this->Movimiento->find('all',array(
            'recursive' => 0,'order' => 'Movimiento.id DESC',
            'conditions' => array('Movimiento.user_id' => $idUsuario,'Movimiento.estado' => 'Pagado')
            
            ));
        
        $movimientos2 = $this->Movimiento->find('all',array(
            'recursive' => 0,'order' => 'Movimiento.id DESC',
            'conditions' => array('Movimiento.user_id' => $idUsuario,'Movimiento.estado' => 'Pagado')
            ,'group' => array('Movimiento.parametro_id')
            ,'fields' => array('COUNT(Movimiento.id) cantidad','SUM(Movimiento.cuota) total','Movimiento.moneda','Parametro.nombre')
            ));
        //debug($movimientos2);exit;
        $this->set(compact('movimientos','usuario','movimientos2'));
        //debug($usuario);exit;
    }
    public function listarecibos()
    {
        $recibos = $this->Recibo->find('all',array('recursive' => 0,'order' => 'Recibo.id DESC'));
        $this->set(compact('recibos'));
    }
    public function ajax_tcambio()
    {
        $this->layout = 'ajax';
        $tcambio = $this->Tcambio->find('first',array('order' => 'Tcambio.id DESC'));
        if(!empty($tcambio))
            $this->request->data['Tcambio']['cambio'] = $tcambio['Tcambio']['cambio'];
    }
    public function guarda_tcambio()
    {
        $this->request->data['Tcambio']['user_id'] = $this->Session->read('Auth.User.id');
        $this->Tcambio->create();
        $this->Tcambio->save($this->request->data['Tcambio']);
        $this->Session->setFlash('Se registro correctamente','msgbueno');
        $this->redirect($this->referer());
    }
}
